// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
// 添加数据库命令对象
const dbCmd = db.command;
const dbusers = db.collection('users');

async function getUserManagerList() {
	try {
		const res = await dbusers
			.where(
				// 使用 dbCmd.or 重构查询条件
				dbCmd.or([{
						"role.text": "管理员11"
					},
					{
						"role.text": "超级管理员"
					}
				])
			)
			.field({
				mobile: true
			})
			.get();

		return {
			code: 0,
			data: res.data,
			message: 'success'
		};
	} catch (error) {
		console.error("获取管理员列表失败:", error);
		return {
			code: -1,
			data: null,
			message: '数据库查询失败，请检查错误日志'
		};
	}
}

module.exports = {
	//给用户发送审批完成短信
	async pushmsg(event, content) {
		// return
		const {
			mobile,
			driver_name,
			driver_mobile,
			car_license
		} = event;

		// 参数校验（新增必要字段验证）
		if (!mobile || !driver_name || !driver_mobile || !car_license) {
			// if (!mobile) {
			return {
				statusCode: 400,
				body: {
					code: -2,
					message: '缺少必要参数：mobile/driver_name/driver_mobile/car_license'
				}
			};
		}

		// 配置参数
		const config = {
			appcode: '6a8213a375a843ff88e27f1c08e4887a',
			smsSignId: "2e65b1bb3d054466b82f0c9d125465e2",
			templateId: "765881ad50144b0da68c32eee328e010"
		};

		// 动态生成短信参数（按模板要求格式）
		const param = `**司机**:${driver_name},**手机**:${driver_mobile},**车牌**:${car_license}`;
		// const param = {}
		// 请求参数
		const requestData = {
			mobile: mobile,
			smsSignId: config.smsSignId,
			templateId: config.templateId,
			param: param
		};

		try {
			// 使用uniCloud内置httpclient
			const {
				status,
				data
			} = await uniCloud.httpclient.request(
				'https://gyytz.market.alicloudapi.com/sms/smsSend', {
					method: 'POST',
					contentType: 'application/x-www-form-urlencoded', // 重要：声明表单格式
					headers: {
						"Authorization": `APPCODE ${config.appcode}`
					},
					data: {
						mobile: mobile,
						smsSignId: config.smsSignId,
						templateId: config.templateId,
						param: param
					},
					dataType: 'json' // 自动解析响应为JSON
				}
			);

			// 处理非200响应
			if (status !== 200) {
				throw new Error(`API响应异常，状态码：${data}`);
			}

			return {
				statusCode: 200,
				body: {
					code: 0,
					data: data,
					message: '短信发送成功'
				}
			};
		} catch (error) {
			//console.error('短信发送失败:', error);
			return {
				statusCode: 500,
				body: {
					code: -1,
					message: '短信发送失败',
					error: error.message || '未知错误'
				}
			};
		}
	},
	// 给所有管理员发送审核短信
	async approvesms() {
		// return
		// 1. 获取所有管理员手机号
		const managerResult = await getUserManagerList();
		if (managerResult.code !== 0 || !managerResult.data || managerResult.data.length === 0) {
			return {
				statusCode: 500,
				body: {
					code: -2,
					message: '获取管理员列表失败或无管理员',
					error: managerResult.message || '无管理员数据'
				}
			};
		}

		// 2. 提取有效的手机号
		const mobiles = managerResult.data
			.map(user => user.mobile)
			.filter(mobile => /^1[3-9]\d{9}$/.test(mobile)); // 基本手机号格式验证

		if (mobiles.length === 0) {
			return {
				statusCode: 400,
				body: {
					code: -3,
					message: '没有有效的管理员手机号码'
				}
			};
		}

		// 3. 配置短信参数
		const config = {
			appcode: '6a8213a375a843ff88e27f1c08e4887a',
			smsSignId: "2e65b1bb3d054466b82f0c9d125465e2",
			templateId: "9d20ba4bca864e12999cf8612ed5872b"
		};

		const results = [];
		let successCount = 0;

		// 4. 批量发送短信（添加500ms间隔防止频率限制）
		for (const [index, mobile] of mobiles.entries()) {
			try {
				// 添加发送间隔（第一条立即发送，后续间隔500ms）
				if (index > 0) {
					await new Promise(resolve => setTimeout(resolve, 500));
				}

				const {
					status,
					data
				} = await uniCloud.httpclient.request(
					'https://gyytz.market.alicloudapi.com/sms/smsSend', {
						method: 'POST',
						contentType: 'application/x-www-form-urlencoded',
						headers: {
							"Authorization": `APPCODE ${config.appcode}`
						},
						data: {
							mobile: mobile,
							smsSignId: config.smsSignId,
							templateId: config.templateId
						},
						dataType: 'json'
					}
				);

				if (status === 200 && data.code === '0') {
					successCount++;
					results.push({
						mobile,
						status: 'success',
						message: '发送成功'
					});
				} else {
					results.push({
						mobile,
						status: 'fail',
						message: data.message || `API响应异常，状态码：${status}`
					});
				}
			} catch (error) {
				results.push({
					mobile,
					status: 'error',
					message: error.message || '短信发送异常'
				});
			}
		}

		// 5. 返回汇总结果
		return {
			statusCode: 200,
			body: {
				code: 0,
				data: {
					total: mobiles.length,
					success: successCount,
					fail: mobiles.length - successCount,
					results: results
				},
				message: `短信发送完成，成功: ${successCount}条，失败: ${mobiles.length - successCount}条`
			}
		};
	},
	_before: function() { // 通用预处理器

	},
	/**
	 * method1方法描述
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	/* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/
}